home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
scope
/
176-200
/
scopedisk191
/
chkbook
/
checkbook.rexx
< prev
next >
Wrap
OS/2 REXX Batch file
|
1995-03-19
|
8KB
|
319 lines
/*
**
** CHECKBOOK.REXX CheckBook Balancing in AREXX
** By: James M. Cates (16.03.91)
**
*/
SIGNAL ON BREAK_C
SIGNAL ON SYNTAX
SIGNAL ON IOERR
TRACE OFF
VERSION = '$VERS1.0 (16.03.91)'
AUTHOR = 'By: James M. Cates'
TRUE = '1'
FALSE = '0'
B = '1B'X'[1m'
D = '1B'X'[0m'
R = '1B'X'[33m'
CLS = '0C'X
LF = '0A'X
ENT1 = 'Enter ('R'W'D')ithdraw,('R'D'D')eposit,'
ENT2 = '('R'N'D')ew Book,('R'S'D
ENT3 = ')ave,('R'O'D')pen, ('R'K'D')ill or ('R'Q'D')uit'
IF ~EXISTS('libs:rexxsupport.library') THEN DO
SAY 'RexxSupport.library not in Libs: ... Aborting'
EXIT 10
END
IF ~SHOW('L','rexxsupport.library') THEN
CALL ADDLIB('rexxsupport.library',0,-30)
INSTRUCT:
SAY
SAY B||R'CHECKBOOK.REXX 'D||VERSION
SAY AUTHOR
SAY
SAY ENT1||ENT2||ENT3
SAY 'after prompt W, D, N, S, O, K or Q: '
SAY
SAY 'Enter a positive number after the prompt AMOUNT: '
SAY
SAY 'Begin by entering a UserName.'
ENTER_NAME:
SAY 'You MUST enter a UserName if you wish to save/retrieve files.'
SAY 'UserName should be '||B||'ONE'||D||' word '||R||'12 CHAR LIMIT'||D
SAY
PullName = WRITECH('STDOUT',B'USERNAME : 'D)
PULL UNAME
IF (LENGTH(UNAME) > 12) THEN DO
SAY LF||R||'TRY AGAIN...TOO LONG'||D
CALL ENTER_NAME
END
SAY
SAY 'Now enter a Starting balance.'
SAY
PullStart = WRITECH('STDOUT',B'AMOUNT : 'D)
PULL STARTBAL
IF STARTBAL = '' THEN (STARTBAL = '0')
NUMCHECK = '0'
NUMDEP = '0'
CURBAL = STARTBAL
MAIN:
DO BALANCE = 1
READT = READTRANS(TRANTYPE, AMOUNT)
UPDAT = UPDATE(TRANTYPE, AMOUNT, CURBAL, NUMCHECK, NUMDEP)
END
PROCESS:
NUM = '0'
STARTBAL = '0'
CURBAL = '0'
NUMCHECK = '0'
NUMDEP = '0'
AMOUNT = '0'
UNAME = ''
RETURN 0
READTRANS:
OPT1 = '['||R||'W'||D||']ithdraw,['||R||'D'||D||']eposit,['||R||'N'||D||']ew User,'
OPT2 = '['||R||'S'||D||']ave, ['||R||'O'||D||']pen, '
OPT3 = '['||R||'K'||D||']Ill Entry or ['||R||'Q'||D||']uit:'
OPT_PROMT = OPT1||OPT2||OPT3
SAY
PULLTRAN = WRITECH('STDOUT',OPT_PROMT)
PULL TRANTYPE
IF TRANTYPE = 'W'|TRANTYPE = 'D' THEN DO
SAY
PULLAMT = WRITECH('STDOUT',B'AMOUNT : 'D)
PULL AMOUNT
END
ELSE DO
NOP
END
SAY CLS
SAY
RETURN 0
UPDATE:
SELECT
WHEN TRANTYPE = 'D' THEN
DO
CURBAL = (CURBAL + AMOUNT)
NUMDEP = (NUMDEP + 1)
SAY
SAY 'Depositing $ ' AMOUNT
SAY 'Balance of $ ' CURBAL
END
WHEN TRANTYPE = 'W' THEN
DO
CURBAL = (CURBAL - AMOUNT)
NUMCHECK = (NUMCHECK + 1)
SAY
SAY 'Check for $ ' AMOUNT
SAY 'Balance of $ ' CURBAL
if (CURBAL < 0) then
SAY(B'WARNING! You are overdrawn.'D)
END
WHEN TRANTYPE = 'N' THEN
DO
SIGNAL REPORT
END
WHEN TRANTYPE = 'S' THEN
DO
NUM = '0'
SIGNAL CHECK_SAVE_BAL
END
WHEN TRANTYPE = 'O' THEN
DO
SIGNAL OPEN_SAVED
END
WHEN TRANTYPE = 'K' THEN
DO
SIGNAL KILL_ENTRY
END
WHEN TRANTYPE = 'Q' THEN
DO
SIGNAL ENDIT
END
OTHERWISE
DO
SAY B'Invalid transaction type ' TRANTYPE '..transaction ignored'D
END
END
RETURN 0
REPORT:
SAY CLS||LF
SAY 'LAST USER WAS '||B||UNAME||D||'.'
SAY 'STATS FOR '||B||UNAME||D||':'||LF
SAY
SAY 'Starting balance was: $ ' STARTBAL
SAY 'Final balance is: $ ' CURBAL
SAY 'Number of checks written : ' NUMCHECK
SAY 'Number of deposits made : ' NUMDEP
SAY
SAY 'NEW BOOK REQUESTED....SETTING UP....CLEARING TABLES'
PROC = PROCESS(STARTBAL, CURBAL, NUMCHECK, NUMDEP)
INST = INSTRUCT(STARTBAL)
RETURN 0
CHECK_SAVE_BAL:
SAY CLS
SAY
SAY 'FILE WILL BE SAVED AS REXX:CheckBook/'||R||'UserName-Number.JulianDate.CBRX'||D
SAY
NUM = NUM
FILENAME = 'REXX:checkbook/'UNAME'-'NUM'.'||DATE(J)||'.CBRX'
CREAT_DIR = MAKEDIR('REXX:CheckBook')
TEST_NAME = EXISTS(FILENAME)
IF TEST_NAME THEN DO
NUM = (NUM + 1)
FILENAME = 'REXX:checkbook/'UNAME'-'NUM'.'||DATE(J)||'.CBRX'
SIGNAL CHECK_SAVE_BAL
END
ELSE SIGNAL OPEN_WRITE
OPEN_WRITE:
RC_OPEN = OPEN('SAVE_FILE',FILENAME,'W')
IF ~RC_OPEN THEN DO
SAY 'A PROBLEM OCCURED IN OPENING THE SAVE FILE'
SAY 'RETURNING TO MAIN PROGRAM...'
CALL MAIN
END
SIGNAL WRITE_DATA
WRITE_DATA:
ASC.1 = '**@@**CHECKBOOK.REXX 'VERSION' JMC'
ASC.2 = '**@@**SAVED.DATA.FILE'
ASC.3 = '**@@**DATE.SAVED+++++++'DATE(E)
ASC.4 = '**@@**FILE.NAME++++++++'UNAME||DATE(J)'.CBRX'
ASC.5 = '**@@**UNAME++++++++++++'UNAME
ASC.6 = '**@@**CURBAL+++++++++++'CURBAL
ASC.7 = '**@@**NUMCHECK+++++++++'NUMCHECK
ASC.8 = '**@@**NUMDEP+++++++++++'NUMDEP
ASC.9 = '**@@**END.DATA'
DO LIN = 1 TO 8
HEX.LIN = C2X(ASC.LIN)
LPUT_ASC = WRITELN('SAVE_FILE',HEX.LIN)
END
PUT_ASC = WRITECH('SAVE_FILE',ASC.9)
RC_CLOSE = CLOSE('SAVE_FILE')
IF ~RC_CLOSE THEN
SAY 'A PROBLEM OCCURED IN CLOSING '||R||FILENAME||D||' CHECK THE FILE...'
ELSE
SAY 'DATA SUCCESSFULLY SAVED AS '||B||FILENAME||D
CALL MAIN
OPEN_SAVED:
SAY 'DIRECTORY LISTING OF '||R||'REXX:CHECKBOOK'||D
SAY
SAY SHOWDIR('REXX:CHECKBOOK','F',LF)
SAY 'ENTER FILENAME '||R||'WITHOUT'||D||' .CBRX SUFFIX'
GET_FILE = WRITECH('STDOUT','OPEN WHICH FILE ? ')
PULL TEST_FILENAME
SAY
D_FILENAME = 'REXX:CHECKBOOK/'||TEST_FILENAME||'.CBRX'
RS_OPEN = OPEN('DATA_FILE',D_FILENAME,'R')
IF RS_OPEN = FALSE THEN DO
SAY 'A PROBLEM OCCURED OPENING 'D_FILENAME
SAY 'RETURNING TO PROGRAM...'
CALL OPEN_SAVED
END
TEST_STRING = '2A2A40402A2A434845434B424F4F4B2E52455858'
COMP_STRING = READCH('DATA_FILE',40)
IF COMP_STRING ~= TEST_STRING THEN DO
SAY 'THAT IS NOT A VALID CHECKBOOK DATA FILE...SORRY.'
CALL OPEN_SAVED
END
SIGNAL GET_DATA
GET_DATA:
DO DAT = 1 TO 8
DATA.DAT = READLN('DATA_FILE')
END
D_DAY = RIGHT(X2C(DATA.3),8)
UNAME = STRIP(RIGHT(X2C(DATA.5),12),'L','+')
CURBAL = STRIP(RIGHT(X2C(DATA.6),12),'L','+')
NUMCHECK = STRIP(RIGHT(X2C(DATA.7),9),'L','+')
NUMDEP = STRIP(RIGHT(X2C(DATA.8),10),'L','+')
SAY 'DATE DATA FILE SAVED : 'D_DAY
SAY 'DATA FILE BELONGS TO : 'UNAME
SAY 'CURRENT BALANCE IS : $'CURBAL
SAY 'NUMBER OF CHECKS DRAWN : 'NUMCHECK
SAY 'NUMBER OF DEPOSITS MADE : 'NUMDEP
SAY
SAY 'FILENAME WILL BE UPDATED IF SAVED AGAIN.'
SAY 'PRESS ANY KEY TO CONTINUE...'
PULL ANYCHAR
SAY
RS_CLOSE = CLOSE('DATA_FILE')
CALL MAIN
KILL_ENTRY:
SAY 'DIRECTORY LISTING OF '||R||'REXX:CHECKBOOK'||D
SAY
SAY SHOWDIR('REXX:CHECKBOOK','F',LF)
SAY 'ENTER FILENAME '||R||'WITHOUT'||D||' .CBRX SUFFIX'
GET_FILE = WRITECH('STDOUT','OPEN WHICH FILE ? ')
PULL TEST_KILLFILE
SAY
K_FILENAME = 'REXX:CHECKBOOK/'||TEST_KILLFILE||'.CBRX'
KILLIT = DELETE(K_FILENAME)
IF ~KILLIT THEN DO
SAY 'UNABLE TO DELETE ENTRY '||R||K_FILENAME||D||' !'
SAY 'LET''S TRY AGAIN'
SIGNAL KILL_ENTRY
END
SAY ''||R||K_FILENAME||D||' SUCCESSFULLY DELETED'||LF
KILL_AGAIN = WRITECH('STDOUT','DELETE ANOTHER FILE (Y/N) ? ')
PULL KILL_QUERY
IF KILL_QUERY = UPPER('y') THEN DO
CALL KILL_ENTRY
END
SAY 'RETURNING TO MAIN...'
CALL MAIN
BREAK_C:
SAY
SAY B'PROGRAM ABORTED...'D
SAY
EXIT 10
SYNTAX:
SAY CLS||LF
SYN1 = 'ERROR CODE 'RC' MEANING ('
SYN2 = R||B||ERRORTEXT(RC)||D
SYN3 = ') WAS RETURNED AFTER LINE '||SIGL||' WAS EXECUTED'
SAY SYN1||SYN2||SYN3
SAY
SAY 'EXECUTION HALTED.'
SAY
EXIT 5
IOERR:
SAY CLS||LF
SAY 'A I/O ERROR OCCURED...IT WAS NOT FATAL'
SAY 'RETURNING TO MAIN...TRY AGAIN'
SIGNAL MAIN
ENDIT:
SAY
SAY 'LAST USER WAS '||B||UNAME||D||'.'
SAY 'STATS FOR '||B||UNAME||D||':'||LF
SAY 'Starting balance was: $ ' STARTBAL
SAY 'Final balance is: $ ' CURBAL
SAY 'Number of checks written: ' NUMCHECK
SAY 'Number of deposits made : ' NUMDEP
SAY
EXIT 0